package com.cyru.statemachine.core;

/**
 * description: 转换
 *
 * @author zhangxuchuan
 * date 2022/5/1
 */
public interface Transition<S, E, C> {

    /**
     * 设置源状态
     */
    void setSourceState(State<S, E, C> source);

    /**
     * 获取源状态
     */
    State<S, E, C> getSourceState();

    /**
     * 设置目标状态
     */
    void setTargetState(State<S, E, C> source);

    /**
     * 获取目标状态
     */
    State<S, E, C> getTargetState();

    /**
     * 设置触发器
     */
    void setTrigger(Trigger<S, E, C> trigger);

    /**
     * 获取触发器
     */
    Trigger<S, E, C> getTrigger();


    State<S, E, C> execute(C context);

    boolean check(C context);

}
